hotplug: Avoid race condition when creating or destroying network bridges
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 15 Mar 2010 13:16:35 +0000 (13:16 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 15 Mar 2010 13:16:35 +0000 (13:16 +0000)
I saw the following message when I created or destroyed two bridges by
using network-bridge script at same time.  Of course names of the
bridges are different.  But, a temporal name "tmpbridge" is used by
the script to create or destroy the bridges.  I think that the message
was shown by "tmpbridge".

  SIOCSIFNAME: File exists

This patch avoids race condition when creating or destroying the
bridges.

Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
tools/hotplug/Linux/network-bridge

index 676b6a62fde2e14857da0e9097dcec4a2802e998..d47c7b2b5c93d64b3002749e16d90885aee7eb6d 100644 (file)
 
 
 dir=$(dirname "$0")
+. "$dir/logging.sh"
 . "$dir/xen-script-common.sh"
 . "$dir/xen-network-common.sh"
+. "$dir/locking.sh"
 
 findCommand "$@"
 evalVariables "$@"
@@ -219,6 +221,8 @@ op_start () {
         return
     fi
 
+    claim_lock "network-bridge"
+
     create_bridge ${tdev}
 
     preiftransfer ${netdev}
@@ -249,6 +253,8 @@ op_start () {
     if [ ${antispoof} = 'yes' ] ; then
        antispoofing
     fi
+
+    release_lock "network-bridge"
 }
 
 op_stop () {
@@ -259,6 +265,8 @@ op_stop () {
        return
     fi
 
+    claim_lock "network-bridge"
+
     transfer_addrs ${bridge} ${pdev}
     if ! ifdown ${bridge}; then
        get_ip_info ${bridge}
@@ -274,6 +282,8 @@ op_stop () {
     do_ifup ${netdev}
 
     brctl delbr ${tdev}
+
+    release_lock "network-bridge"
 }
 
 # adds $dev to $bridge but waits for $dev to be in running state first